import java.util.Scanner;

/*
从左往右的尝试模型1
规定1和A对应、2和B对应、3和C对应.那么一个数字字符串比如”111”就可以转化为“AAA”、“KA"和”AK
给定一个只有数字字符组成的字符串str，返回有多少种转化结果
 */
public class Demo6 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
        char[] ch=str.toCharArray();
         int count=process(ch,0);
        System.out.println(count);
    }

    private static int process(char[] ch, int i) {//111
        //当走到最后位置的时候，返回1，因为最后一个字符一定可以转换
        if(i==ch.length)
        {
            return 1;
        }
        //当遇到‘0’字符的时候，无法转换
        if(ch[i]=='0')
        {
            return  0;
        }
        if(ch[i]=='1')
        {
            //一个字符转换 ‘1’-》A
            int ret=process(ch,i+1);
            //二个字符转换 ‘11’-》K
            //先判断是否越界
            if(i+1<ch.length)
            {
                ret=ret+process(ch,i+2);
            }
            return ret;
        }
        if(ch[i]=='2')
        {
            //一个字符转换 ‘1’-》A
            int ret=process(ch,i+1);
            //二个字符转换 ‘11’-》K
            //先判断是否越界，然后判断第二个字符的数字是否在0-6之间，因为只能在这个区间，才能被转换
            if(i+1<ch.length && (ch[i+1]>='0' && ch[i+1]<='6'))
            {
                ret=ret+process(ch,i+2);
            }
            return  ret;
        }
        //当字符大于等于3的时候，就直接往下一位走就行
        return process(ch,i+1);
    }
}
